.\" Modified Sat Jan 14 13:38:30 CST 2017 by caiwang213
.\"   <caiwang213@qq.com>
.\"
.TH gdb 3 2017-01-13 "Linux" "Linux Programmer's Manual"
.SH NAME
gdb \- linux debug tool
.SH 安装方法
.BR 无

.SH 常见问题
.TP
.B a 
No symbol "pParam" in current context.
.B S. 
CFLAGS += -g3 -gdwarf-2
.B S. 
可执行文件不能trip

.TP
.B b 
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.166.el6_7.3.i686
.B S. 
先将glibc-2.12-1.166.el6_7.3.i686升级到glibc-2.12-1.192.el6_7.3.i686 修改rhel-source.repo, 添加：
.TP
[debug]
.TP
name=CentOS-6 - Debuginfo
.TP
baseurl=http://debuginfo.centos.org/6/$basearch/
.TP
gpgcheck=1
.TP
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-6
.TP
enabled=1
.TP
sudo debuginfo-install glibc-2.12-1.192.el6_7.3.i686 libgcc-4.4.7-16.el6.i686 libstdc++-4.4.7-16.el6.i686 或
.TP
sudo yum install glibc-debuginfo

.SH 使用方法
.TP 20 
.B gdb ./bin 

.TP 
.B gdb -tui ./bin
默认进入TUI调试模式, 

.TP 
.B set args xxx
设置启动参数

.TP 
.I CTRL+X+A
可以在普通模式与TUI模式进行切换
.TP 
.I CTRL+X+S 
进入TUI调试模式，但此时单步调试时可以直接使用GDB命令，不用再回车就可以执行命令,再次按
.I Q 或 
.I CTRL+X+S 取消直接使用GDB命令

.TP 
.B l  
列出当前调试代码文件

.TP 
.B b n 
在第n行设置断点 

.TP 20
.B b 类名::函数名 
在类名::函数名设置断点 

.TP 20
.B b talk.cpp:500
在talk.cpp第500行设置断点 

.TP 20
.B b n if i==5
用于设置条件断点，在循环中使用非常方便

.TP
.B en/disable n
使能/不使能断点

.TP
.B CTRL-C、b n、c
运行中设置断点

.TP 20 
.B watch [this].变量
同awatch, 注意成员变量前要加this,设置一个观察点，当变量被读出或写入时程序被暂停

.TP 20
.B rwatch [this].变量
注意成员变量前要加this.或this->, 设置一个观察点，当变量被程序读时，程序被暂停

.TP 
.B s 
step in单步跳入调试

.TP 
.B n 
next 单步调试

.TP 
.B u 
until 运行至当前语句块结束

.TP 
.B p 变量
print 打印当前变量值

.TP 
.B p *变量
print 打印指针变量值

.TP
.B p *this
print 打印this指针变量值

.TP
.B display 表达式 
该命令用于显示表达式的值，使用了该命令后，每当程序运行到断点处都会显示表达式的值, 注意成员变量前要加this.或this->

.TP
.B undisplay 编号
用于删除一个要显示的表达式，调用这个命令删除一个表达式后，被删除的表达式将不被显示

.TP
.B whatis 变量
显示某个表达式的数据类型

.TP
.B i [b][thread]
info 列出当前断点、线程等信息,可以用h i查看

.TP
.B h [i][b]
查看i b等命令帮助

.TP
.B bt 
backtrace, 类似info stack, 用来打印栈侦指针，也可以在该命令后加上要打印的栈侦指针的个数

.TP
.B f 
frame 显示当前栈帧

.TP
.B up 
跳到上一层函数

.TP
.B down 
跳到下一层函数,与up相对应

.TP
.B finish 
一直运行到函数返回

.TP
.B info sources
查看源文件信息

.TP
.B handle SIGPIPE nostop
调试时忽略信号

.TP
.B ulimit -c unlimited
设置生成coredump文件(死在第三库可能不会产生core文件)

.SH 注意事项
.B 成员变量前要加this.或this->

.SH "SEE ALSO"
.BR gdb(1),
